//*******************************************************************************
// COPYRIGHT NOTES
// ---------------
// This is a part of ToolkitsPro Library Professional Edition
// Copyright (C) 1998-2022 ToolkitsPro
// All rights reserved.
//
// This source code can be used, distributed or modified
// only under terms and conditions
// of the accompanying license agreement.
//*******************************************************************************
//
// ToolkitsPro.cpp : Defines the initialization routines for the DLL.
//

#include "TKSPStdAfx.h"
#include <afxdllx.h>

#include "ToolkitsPro.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

static AFX_EXTENSION_MODULE TKSProDLL = { FALSE, NULL, NULL, NULL, NULL };

extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
    // Remove this if you use lpReserved
    UNREFERENCED_PARAMETER(lpReserved);

    if(dwReason == DLL_PROCESS_ATTACH) {
        TRACE0("TKSPRO.DLL Initializing!\n");

        // Extension DLL one-time initialization
        if(!AfxInitExtensionModule(TKSProDLL, hInstance))
            return 0;

        // Insert this DLL into the resource chain
        // NOTE: If this Extension DLL is being implicitly linked to by
        //  an MFC Regular DLL (such as an ActiveX Control)
        //  instead of an MFC application, then you will want to
        //  remove this line from DllMain and put it in a separate
        //  function exported from this Extension DLL.  The Regular DLL
        //  that uses this Extension DLL should then explicitly call that
        //  function to initialize this Extension DLL.  Otherwise,
        //  the CDynLinkLibrary object will not be attached to the
        //  Regular DLL's resource chain, and serious problems will
        //  result.
#ifndef _TKSPRO_IN_OTHER_DLL
        new CDynLinkLibrary(TKSProDLL);
#endif	// _TKSPRO_IN_OTHER_DLL
    } else if(dwReason == DLL_PROCESS_DETACH) {
        TRACE0("TKSPRO.DLL Terminating!\n");
        // Terminate the library before destructors are called
        AfxTermExtensionModule(TKSProDLL);
    }
    return 1;   // ok
}

TKSPRODLLEXPORT void TKSProSetResourceHandle(HINSTANCE hinstResDLL)
{
    TKSProDLL.hResource = (hinstResDLL == NULL) ?
        TKSProDLL.hModule : hinstResDLL;
}

HINSTANCE TKSProGetResourceHandle()
{
    return TKSProDLL.hResource;
}

HINSTANCE TKSProGetInstanceHandle()
{
    return TKSProDLL.hModule;
}

#ifdef _TKSPRO_IN_OTHER_DLL
__declspec(dllexport) void TKSProDllInitialize()
{
    new CDynLinkLibrary(TKSProDLL);
}
#endif	// _TKSPRO_IN_OTHER_DLL